import java.util.ArrayList;
import java.util.List;

public class Demo8 {
    public static void main(String[] args) {
        // List<Integer> list = new ArrayList<>();
//        class Solution {
//            public List<Integer> inorderTraversal(TreeNode root) {
//                List<Integer> list = new ArrayList<Integer>();
//                Deque<TreeNode> q = new LinkedList<TreeNode>();;
//                while(!q.isEmpty() || root != null){
//                    while(root != null){
//                        q.push(root);
//                        root = root.left;
//                    }
//                    root = q.pop();
//                    list.add(root.val);
//                    root = root.right;
//                }
//
//                return list;
//            }
//        }
    }
}

class Solution {
    public int getMaxLen(int[] nums) {
        // 记录正数的个数
        int pos = 0;
        // 记录负数的个数
        int neg = 0;
        // 记录负数第一次出现的位置
        int first = -1;
        int ans = 0;

        for(int i = 0;i < nums.length;i++){
            if(nums[i] == 0){
                // 0乘任何数都是0,不可能出现最长的正数的子数组,所以都恢复原状
                pos = 0;
                neg = 0;
                first = -1;
            }else if(nums[i] > 0){
                pos++;
            }else{
                if(first == -1){
                    first = i;
                }
                neg++;
            }

            if(neg % 2 == 0){
                ans = Math.max(ans,pos + neg);
            }else{
                ans = Math.max(ans,i - first);
            }
        }

        return ans;
    }
}
